"""
演示Python类的魔术方法
"""


class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # __str__魔术方法，当打印类内容时执行此方法
    def __str__(self):
        return f"Student类对象，name:{self.name}, age:{self.age}"

    # __lt__魔术方法，当类进行小于或大于比较时执行此方法
    def __lt__(self, other):
        return self.age < other.age

    # __le__魔术方法，当类进行小于等于或大于等于时执行此方法
    def __le__(self, other):
        return self.age <= other.age

    # __eq__魔术方法，当类进行相等判断时执行此方法
    def __eq__(self, other):
        if self.name == other.name and self.age == other.age:
            return True
        else:
            return False


stu = Student("张三", 31)
# 如果没有实现__str__魔术方法，这里会输出对象的内存地址
print(stu)
print(str(stu))

stu2 = Student("李四", 36)
stu3 = Student("张三", 31)
# 如果没有实现__lt__魔术方法，这里会报错
print(f"stu < stu2: {stu < stu2}")
print(f"stu > stu2: {stu > stu2}")

# 如果没有实现__le__魔术方法，这里会报错
print(f"stu <= stu2: {stu <= stu2}")
print(f"stu <= stu2: {stu <= stu2}")

# 如果没有实现__eq__魔术方法，这里比较的是两个对象的内存地址
print(f"stu == stu3: {stu == stu3}")
